package com.probiz.estore.catalog.dao;

import java.util.List;

import com.probiz.estore.catalog.model.ProductCategorySearchCriteria;
import com.probiz.estore.common.model.catalog.ProductCategory;
import com.probiz.estore.core.search.SearchCriteria;

/**
 * Dao interface for ProductCategory.
 */
public interface ProductCategoryDao extends BaseCategoryDao<ProductCategory> {
    /**
	 * 根据指定目录编码获取目录
	 * @param categoryCode 目录编码
	 * @return 含指定目录编码的目录
	 **/
	public ProductCategory getCategoryByCode(String categoryCode);
	/**
	 * 根据上级目录id和目录名称找寻目录
	 * @param parentCategoryId
	 * @param categoryName
	 * @return
	 */
	public List<ProductCategory> listCategoryByParentIdAndName(Integer parentCategoryId, String categoryName);
	/**
	 * 搜索产品目录
	 * @param productCategorySearchCriteria 自定义搜索条件
	 * @param searchCriteria 分页搜索条件
	 * @return 产品目录搜索结果列表
	 **/
	public List<ProductCategory> searchByCriteria(ProductCategorySearchCriteria productCategorySearchCriteria, SearchCriteria searchCriteria);
	/**
	 * 获取导航目录，即获得上级目录和自身目录，但不包括根目录
	 * @param categoryId 目录主键
	 * @return 导航目录。例如 诺基亚的导航目录是[通讯设备，手机]
	 **/
	public List<ProductCategory> getNavigationCategories(Integer categoryId) ;
	

	 /**
    * 根据目录编码找出目录个数，但该目录的不能是参数id所指定的目录
    *
    * @param categoryCode 目录编码
    * @param categoryId 目录id
    * @return 个数
    */
   public Long getSizeByCategoryCodeByNotCategoryId(String categoryCode,Integer categoryId);
   /**
    * 获得所有目录的编码列表
    * @return 编码列表
    */
   public List<String> getAllProductCategoryCodes();
   
   /**
    * 根据商品目录查查询出所有的目录下的商品，用于目录删除。
    * @return List<ProductCategory>
    */
   public List<ProductCategory> getCategorysByCategoryPath(String categoryPath);

   /**
    * 根据商品目录名称和父目录Id获得目录集合
    * @param name
    * @param parentId
    * @return
    */
   public List<ProductCategory> getCategorysByNameAndParentId(String name, Integer parentId);
}